using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Analyze Mosaic Dataset</para>
    /// <para>Performs checks on a mosaic dataset for errors and possible improvements.</para>
    /// <para>对镶嵌数据集执行检查，以查找错误和可能的改进。</para>
    /// </summary>    
    [DisplayName("Analyze Mosaic Dataset")]
    public class AnalyzeMosaicDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AnalyzeMosaicDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset you want to analyze.</para>
        /// <para>要分析的镶嵌数据集。</para>
        /// </param>
        public AnalyzeMosaicDataset(object _in_mosaic_dataset)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Analyze Mosaic Dataset";

        public override string CallName => "management.AnalyzeMosaicDataset";

        public override List<string> AcceptEnvironments => ["parallelProcessingFactor"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _where_clause, _checker_keywords, _out_mosaic_dataset];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset you want to analyze.</para>
        /// <para>要分析的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL statement that confines your analysis to specific raster datasets within this mosaic dataset.</para>
        /// <para>一个 SQL 语句，用于将分析限制为此镶嵌数据集中的特定栅格数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Checks Performed</para>
        /// <para><xdoc>
        ///   <para>Choose which parts of the mosaic dataset you want to analyze for known issues.</para>
        ///   <bulletList>
        ///     <bullet_item>Footprint geometry— Analyze the footprint geometry of each selected mosaic dataset item. This is checked on by default.</bullet_item><para/>
        ///     <bullet_item>Function chains— Analyze the function chains for each selected mosaic dataset item.</bullet_item><para/>
        ///     <bullet_item>Raster— Analyze the original raster datasets. This is checked on by default.</bullet_item><para/>
        ///     <bullet_item>Broken paths— Check for broken paths. This is checked on by default.</bullet_item><para/>
        ///     <bullet_item>Source validity— Analyze potential problems with the source data associated with each mosaic dataset item in the selected mosaic dataset. This is a good way to detect issues that may arise during synchronization workflows.</bullet_item><para/>
        ///     <bullet_item>Stale overviews— Overviews are stale when the underlying source data has changed. Once the mosaic dataset is analyzed, you can select which items are stale by right-clicking on the error and clicking Select Associated Items on the context menu.</bullet_item><para/>
        ///     <bullet_item>Pyramids— Analyze the raster pyramids associated with each mosaic dataset item in the selected mosaic dataset. Test for disconnected auxiliary files, which can occur when they are stored in a raster proxy location.</bullet_item><para/>
        ///     <bullet_item>Statistics— Test for disconnected auxiliary statistics files if they are stored in the raster proxy location. Analyze the covariance matrix associated with the raster, when the Gram-Schmidt pan-sharpening method is enabled. Analyze the radiometric pixel depth of a mosaic dataset item against the pixel depth of the mosaic dataset.</bullet_item><para/>
        ///     <bullet_item>Performance— Factors that increase performance include compression during transmission and caching items with many raster functions.</bullet_item><para/>
        ///     <bullet_item>Information— Generate general information about the mosaic dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>选择要分析镶嵌数据集的哪些部分是否存在已知问题。</para>
        ///   <bulletList>
        ///     <bullet_item>封装几何 - 分析每个选定镶嵌数据集项目的封装几何。默认情况下，此选项处于选中状态。</bullet_item><para/>
        ///     <bullet_item>函数链 - 分析每个选定镶嵌数据集项的函数链。</bullet_item><para/>
        ///     <bullet_item>栅格 - 分析原始栅格数据集。默认情况下，此选项处于选中状态。</bullet_item><para/>
        ///     <bullet_item>断开的路径 - 检查断开的路径。默认情况下，此选项处于选中状态。</bullet_item><para/>
        ///     <bullet_item>源有效性 - 分析与所选镶嵌数据集中每个镶嵌数据集项目关联的源数据的潜在问题。这是检测同步工作流期间可能出现的问题的好方法。</bullet_item><para/>
        ///     <bullet_item>过时的概述 — 当基础源数据发生更改时，概述是过时的。分析镶嵌数据集后，可以通过右键单击错误并单击上下文菜单上的选择关联项目来选择哪些项目已过时。</bullet_item><para/>
        ///     <bullet_item>金字塔 - 分析与所选镶嵌数据集中的每个镶嵌数据集项目关联的栅格金字塔。测试断开连接的辅助文件，当辅助文件存储在栅格代理位置时，可能会发生这种情况。</bullet_item><para/>
        ///     <bullet_item>统计数据- 测试断开连接的辅助统计数据文件（如果这些文件存储在栅格代理位置中）。启用 Gram-Schmidt 全色锐化方法时，分析与栅格关联的协方差矩阵。根据镶嵌数据集的像素深度分析镶嵌数据集项的辐射测量像素深度。</bullet_item><para/>
        ///     <bullet_item>性能 - 提高性能的因素包括传输过程中的压缩和缓存具有许多栅格功能的项目。</bullet_item><para/>
        ///     <bullet_item>信息- 生成有关镶嵌数据集的一般信息。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Checks Performed")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _checker_keywords { get; set; } = null;


        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        public AnalyzeMosaicDataset SetEnv(object parallelProcessingFactor = null)
        {
            base.SetEnv(parallelProcessingFactor: parallelProcessingFactor);
            return this;
        }

    }

}